"""
 @author adun
 @date 2020/11/1 16:55
 __init__() 函数【相当于Java中的构造器】
上面的例子是最简单形式的类和对象，在实际应用程序中并不真正有用。

要理解类的含义，我们必须先了解内置的 __init__() 函数。

所有类都有一个名为 __init__() 的函数，它始终在启动类时执行。

使用 __init__() 函数将值赋给对象属性，或者在创建对象时需要执行的其他操作：
注释：每次使用类创建新对象时，都会自动调用 __init__() 函数。【相当于Java的实例初始化】
"""


class Person:
    # def __init__(self, name, age):
    #   self.name = name
    #   self.age = age

    # 对象方法
    # 对象也可以包含方法。对象中的方法是属于该对象的函数。
    #
    # 让我们在 Person 类中创建方法：
    #
    # 实例
    # 插入一个打印问候语的函数，并在 p1 对象上执行它：
    # def myfunc(self):
    #   print("Hello my name is " + self.name)
    # 提示：self 参数是对类的当前实例的引用，用于访问属于该类的变量。【相当于Java中的this关键字】

    # self 参数
    # self 参数是对类的当前实例的引用，用于访问属于该类的变量。
    #
    # 它不必被命名为 self，您可以随意调用它，但它必须是类中任意函数的首个参数：
    def __init__(mysillyobject, name, age):
        mysillyobject.name = name
        mysillyobject.age = age

    def myfunc(abc):
        print("Hello my name is " + abc.name)


# pass 语句
# 类定义不能为空，但是如果您处于某种原因写了无内容的类定义语句，请使用 pass 语句来避免错误。
#
# 实例
class Person1:
    pass


if __name__ == '__main__':
    p1 = Person("Bill", 63)

    print(p1.name)
    print(p1.age)
    print(p1.myfunc())

    # 修改对象属性
    # 您可以这样修改对象的属性：
    #
    # 实例
    # 把 p1 的年龄设置为 40：
    p1.age = 40
    print(p1.age)

    # 特例
    # 删除对象属性
    # 您可以使用
    # del 关键字删除对象的属性：
    # del p1.age
    # print(p1.age)  # 'Person' object has no attribute 'age'

    # 删除对象
    # 使用 del 关键字删除对象：
    #
    # 实例
    # 删除 p1 对象：
    del p1
    print(p1)  # name 'p1' is not defined
